package com.xqiapp.xframe.plugin.codes.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

public final class StringUtil {

	static class Tester {
		public static void main(String[] args) {
			String str = "dsdfs:" + SEPARATOR + "-sdfsdfsdf";
			System.out.println(str);
			String arr[] = split(str, SEPARATOR);
			for (String string : arr) {
				System.out.println(string);
			}
		}
	}

	private StringUtil() {
	}

	/**
	 * 字符串分隔符
	 */
	public static final String SEPARATOR = String.valueOf((char) 29);

	/**
	 * 判断为空
	 * 
	 * true : 为空 false: 不为空
	 * 
	 * @param text
	 * @return boolean
	 */
	public static boolean isEmpty(String text) {
		if (null == text || "".equals(text) || text.trim().isEmpty())
			return true;
		return false;
	}

	/**
	 * 判断不为空
	 * 
	 * @param text
	 * @return boolean
	 */
	public static boolean isNotEmpty(String text) {
		return !isEmpty(text);
	}

	/**
	 * 根据separator分割字符串为字符串数组
	 * 
	 * @param text
	 * @param separator
	 * @return String[]
	 */
	public static String[] split(String text, String separator) {
		return StringUtils.splitByWholeSeparator(text, separator);
	}

	/**
	 * 替换字符串中regex匹配所有的内容为replace
	 * 
	 * @param text
	 * @param regex
	 * @param replace
	 * @return String
	 */
	public static String replaceAll(String text, String regex, String replace) {
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(text);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			m.appendReplacement(sb, replace);
		}
		m.appendTail(sb);
		return sb.toString();
	}

	/**
	 * 获得包含中文的字符串长度方法(一个中文为2个字符)
	 * 
	 * @param text
	 * @return int
	 */
	public static int len(String text) {
		if (isEmpty(text))
			return 0;
		int len = 0;
		for (int i = 0; i < text.length(); i++) {
			if (text.charAt(i) > 127 || text.charAt(i) == 94) {
				len += 2;
			} else {
				len++;
			}
		}
		return len;
	}

	/**
	 * 带有默认值的为空判断
	 * 
	 * @param text
	 * @param def
	 * @return
	 */
	public static String defIfEmpty(String text, String def) {
		return isEmpty(text) ? def : text;
	}

}
